﻿Imports System.Data
Imports System.Collections.ObjectModel

Class CMConfigReporting
    Dim ReportingServicio As New CReportingServicio()
    Dim strFondoAuxCambio As String
    Dim strTipoInstrumentoAuxCambio As String
    Private fondoEnEdicion As CFondoBench
    Private fondoCambio As CFondoBench
    Private TipoInstrumentoEnEdicion As CTipoInstrumento
    Private TipoInstrumentoCambio As CTipoInstrumento
    Private obcFondoBench As New ObservableCollection(Of CFondoBench)
    Private obcTipoInstrumento As New ObservableCollection(Of CTipoInstrumento)

#Region "Carga página"
    Private Sub CMConfigReporting_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded
        Try
            CargaFondos()
            CargaTiposInstrumentos()

            Mouse.OverrideCursor = Cursors.Arrow
        Catch ex As Exception
            Dim intErrorCargaInicial As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Carga página", ex.Message)
            CUtileria.CompletarRegBitacora(intErrorCargaInicial)

            Mouse.OverrideCursor = Cursors.Arrow

            MessageBox.Show("Error TI500. " & ex.Message, "Carga página configuración Reporting Bancomer", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
    End Sub
#End Region

#Region "Carga inicial"
    Private Sub CargaFondos()
        Dim dt As New DataTable()

        Dim intBitacoraDecalog As Integer

        intBitacoraDecalog = CUtileria.GrabarBitacora("ConfigReporting", "Carga de fondos", "Carga de los fondos registrados en la base de datos")

        dt = ReportingServicio.ObtieneFondoBench()

        For Each drAux As DataRow In dt.Rows
            obcFondoBench.Add(New CFondoBench(drAux("FONDO"), drAux("BENCH")))
        Next

        grdFondoBench.ItemsSource = obcFondoBench
        grdFondoBench.UpdateLayout()

        CUtileria.CompletarRegBitacora(intBitacoraDecalog)
    End Sub

    Private Sub CargaTiposInstrumentos()
        Dim dt As New DataTable()

        Dim intBitacoraDecalog As Integer

        intBitacoraDecalog = CUtileria.GrabarBitacora("ConfigReporting", "Carga de tipos intrumentos", "Carga de los tipos de instrumentos registrados en la base de datos")

        dt = ReportingServicio.ObtieneTiposInstrumentos()

        For Each drAux As DataRow In dt.Rows
            obcTipoInstrumento.Add(New CTipoInstrumento(drAux("ID"), drAux("NOMBRE"), drAux("CLASE"), drAux("GRUPO")))
        Next

        grdTiposInstrumentos.ItemsSource = obcTipoInstrumento
        grdTiposInstrumentos.UpdateLayout()

        CUtileria.CompletarRegBitacora(intBitacoraDecalog)
    End Sub

#End Region

#Region "Agregar fondo"
    Private Sub btnAgregarFondo_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnAgregarFondo.Click
        Dim cbpNuevo As New CFondoBench("Escribe FONDO...", "Escribe BENCH ...", True)

        grdFondoBench.CancelEdit(DataGridEditingUnit.Cell)
        grdFondoBench.UnselectAllCells()
        grdFondoBench.UpdateLayout()

        obcFondoBench.Add(cbpNuevo)

        grdFondoBench.ScrollIntoView(cbpNuevo)
        grdFondoBench.UpdateLayout()

        Dim celda As DataGridCell = ObtenerCelda(grdFondoBench, grdFondoBench.Items.Count - 1, 0)
        If Not celda Is Nothing Then
            celda.Focus()
            grdFondoBench.BeginEdit()
            celda.IsSelected = True
        End If
    End Sub
#End Region

#Region "Agregar tipo instrumento"
    Private Sub btnAgregarTI_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnAgregarTI.Click
        Dim cbpNuevoTI As New CTipoInstrumento("Escribe ID...", "Escribe NOMBRE...", "Escribe CLASE...", "Escribre GRUPO...", True)

        grdTiposInstrumentos.CancelEdit(DataGridEditingUnit.Cell)
        grdTiposInstrumentos.UnselectAllCells()
        grdTiposInstrumentos.UpdateLayout()

        obcTipoInstrumento.Add(cbpNuevoTI)

        grdTiposInstrumentos.ScrollIntoView(cbpNuevoTI)
        grdTiposInstrumentos.UpdateLayout()

        Dim celda As DataGridCell = ObtenerCelda(grdTiposInstrumentos, grdTiposInstrumentos.Items.Count - 1, 0)
        If Not celda Is Nothing Then
            celda.Focus()
            grdTiposInstrumentos.BeginEdit()
            celda.IsSelected = True
        End If
    End Sub
#End Region

#Region "Eliminar fondo"
    Private Sub btnEliminarFondo_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnEliminarFondo.Click
        If grdFondoBench.SelectedCells.Count > 0 Then
            Dim msgResultado As MessageBoxResult = MessageBox.Show("¿Está seguro de borrar todos los registros seleccionados?", "Borrar registros fondos bench", MessageBoxButton.YesNo, MessageBoxImage.Question)

            If msgResultado = MessageBoxResult.Yes Then
                Try
                    Dim fondosEliminar As New ObservableCollection(Of CFondoBench)
                    Dim strFondosNoBorrados As String = String.Empty

                    Mouse.OverrideCursor = Cursors.Wait

                    For Each celda As DataGridCellInfo In grdFondoBench.SelectedCells
                        fondosEliminar.Add(CType(celda.Item, CFondoBench))
                    Next

                    For Each T As CFondoBench In fondosEliminar
                        Try
                            Dim blnBorrado As Boolean = ReportingServicio.EliminaFondoBench(T.FONDO, T.BENCH)

                            If Not blnBorrado Then
                                strFondosNoBorrados = strFondosNoBorrados & T.FONDO & ","
                            Else
                                obcFondoBench.Remove(T)
                            End If
                        Catch ex As Exception
                            strFondosNoBorrados = strFondosNoBorrados & T.FONDO & ","
                        End Try
                    Next

                    grdFondoBench.UpdateLayout()

                    If strFondosNoBorrados.Length > 0 Then
                        strFondosNoBorrados = strFondosNoBorrados.Substring(0, strFondosNoBorrados.Length - 1)

                        Mouse.OverrideCursor = Cursors.Arrow

                        MessageBox.Show("No se borraron los registros con los FONDOS = " & strFondosNoBorrados, "Borrar registros fondos bench", MessageBoxButton.OK, MessageBoxImage.Error)
                    End If

                    Mouse.OverrideCursor = Cursors.Arrow
                Catch ex As Exception
                    Dim intErrorBorrado As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Borrar registros fondos bench", ex.Message)

                    Mouse.OverrideCursor = Cursors.Arrow

                    MessageBox.Show("Error TI500. " & ex.Message, "Borrar registros fondos bench", MessageBoxButton.OK, MessageBoxImage.Error)
                End Try
            End If
        Else
            MessageBox.Show("Favor de seleccionar los registros que desea borrar", "Borrar registros fondos bench", MessageBoxButton.OK, MessageBoxImage.Warning)
        End If
    End Sub
#End Region

#Region "Eliminar tipo instrumento"
    Private Sub btnEliminarTI_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnEliminarTI.Click
        If grdTiposInstrumentos.SelectedCells.Count > 0 Then
            Dim msgResultado As MessageBoxResult = MessageBox.Show("¿Está seguro de borrar todos los registros seleccionados?", "Borrar registros tipos de instrumentos", MessageBoxButton.YesNo, MessageBoxImage.Question)

            If msgResultado = MessageBoxResult.Yes Then
                Try
                    Dim tiposEliminar As New ObservableCollection(Of CTipoInstrumento)
                    Dim strTiposNoBorrados As String = String.Empty

                    Mouse.OverrideCursor = Cursors.Wait

                    For Each celda As DataGridCellInfo In grdTiposInstrumentos.SelectedCells
                        tiposEliminar.Add(CType(celda.Item, CTipoInstrumento))
                    Next

                    For Each T As CTipoInstrumento In tiposEliminar
                        Try
                            Dim blnBorrado As Boolean = ReportingServicio.EliminaTipoInstrumento(T.TIPOINSTRUMENTO, T.NOMBRE, T.CLASE, T.GRUPO)

                            If Not blnBorrado Then
                                strTiposNoBorrados = strTiposNoBorrados & T.TIPOINSTRUMENTO & ","
                            Else
                                obcTipoInstrumento.Remove(T)
                            End If
                        Catch ex As Exception
                            strTiposNoBorrados = strTiposNoBorrados & T.TIPOINSTRUMENTO & ","
                        End Try
                    Next

                    grdTiposInstrumentos.UpdateLayout()

                    If strTiposNoBorrados.Length > 0 Then
                        strTiposNoBorrados = strTiposNoBorrados.Substring(0, strTiposNoBorrados.Length - 1)

                        Mouse.OverrideCursor = Cursors.Arrow

                        MessageBox.Show("No se borraron los registros con los Tipos de instrumentos = " & strTiposNoBorrados, "Borrar registros tipos de instrumentos", MessageBoxButton.OK, MessageBoxImage.Error)
                    End If

                    Mouse.OverrideCursor = Cursors.Arrow
                Catch ex As Exception
                    Dim intErrorBorrado As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Borrar registros tipos de instrumentos", ex.Message)

                    Mouse.OverrideCursor = Cursors.Arrow

                    MessageBox.Show("Error TI500. " & ex.Message, "Borrar registros", MessageBoxButton.OK, MessageBoxImage.Error)
                End Try
            End If
        Else
            MessageBox.Show("Favor de seleccionar los registros que desea borrar", "Borrar registros tipos de instrumentos", MessageBoxButton.OK, MessageBoxImage.Warning)
        End If
    End Sub
#End Region

#Region "Generales"
    Private Function ObtenerCelda(ByRef miDataGrid As DataGrid, ByVal indexRow As Integer, ByVal indexCol As Integer) As DataGridCell
        Try
            Dim row As DataGridRow = miDataGrid.ItemContainerGenerator.ContainerFromIndex(indexRow)
            Dim cellContent As Object = miDataGrid.Columns(indexCol).GetCellContent(row)

            Dim objDepend As DependencyObject = cellContent
            Dim celda As DataGridCell = Nothing

            While Not objDepend Is Nothing

                If objDepend.GetType().Name = "DataGridCell" Then
                    celda = objDepend
                    Return celda
                End If
                objDepend = VisualTreeHelper.GetParent(objDepend)
            End While
        Catch ex As Exception
            Throw ex
        End Try

        Return Nothing
    End Function
#End Region

#Region "Generales fondo"
    Private Sub grdFondoBench_BeginningEdit(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdFondoBench.BeginningEdit
        fondoEnEdicion = grdFondoBench.CurrentItem
        strFondoAuxCambio = fondoEnEdicion.FONDO
    End Sub

    Private Sub grdFondoBench_CellEditEnding(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdFondoBench.CellEditEnding
        Dim fondoActual As New CFondoBench()

        Select Case e.EditAction
            Case DataGridEditAction.Commit
                If Not sender.CurrentItem Is Nothing Then
                    Dim Columna As Integer = e.Column.DisplayIndex
                    Dim strFondoAnterior As String, strBenchAnterior As String

                    fondoActual = TryCast(grdFondoBench.CurrentCell.Item, CFondoBench)

                    If fondoActual.Equals(fondoEnEdicion) = False Then
                        CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        Exit Sub
                    End If

                    strFondoAnterior = fondoActual.FONDO
                    strBenchAnterior = fondoActual.BENCH

                    If Columna = 0 Then
                        Dim txtContenidoCelda As Object = grdFondoBench.Columns(Columna).GetCellContent(grdFondoBench.CurrentItem)
                        Dim txtContenidoCeldaAux As Object = grdFondoBench.Columns(1).GetCellContent(grdFondoBench.CurrentItem)

                        If txtContenidoCelda.Text.ToString.Length = 0 Then
                            MessageBox.Show("El campo FONDO no puede ser vacío", "Alta/Actualización registro", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            Exit Sub
                        ElseIf txtContenidoCelda.Text.ToString.ToUpper.Equals(strFondoAuxCambio.ToUpper) Then
                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            Exit Sub
                        End If

                        fondoEnEdicion.FONDO = txtContenidoCelda.Text
                        fondoEnEdicion.BENCH = txtContenidoCeldaAux.Text
                    ElseIf Columna = 1 Then
                        Dim txtContenidoCelda As Object = grdFondoBench.Columns(Columna).GetCellContent(grdFondoBench.CurrentItem)
                        Dim txtContenidoCeldaAux As Object = grdFondoBench.Columns(0).GetCellContent(grdFondoBench.CurrentItem)

                        fondoEnEdicion.FONDO = txtContenidoCeldaAux.Text
                        fondoEnEdicion.BENCH = txtContenidoCelda.Text
                    End If

                    fondoEnEdicion.EsEditableNuevo = fondoActual.EsEditableNuevo

                    If fondoEnEdicion.EsEditableNuevo Then
                        Try
                            Mouse.OverrideCursor = Cursors.Wait
                            Dim intGuardaFondo As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Alta fondo", "Se registra el fondo-bench: FONDO = " & fondoEnEdicion.FONDO & ", BENCH = " & fondoEnEdicion.BENCH)

                            Dim intResultado As Integer = ReportingServicio.AltaFondoBench(fondoEnEdicion.FONDO, fondoEnEdicion.BENCH, CServiciosMacrosSyBaseDB.IDUSUARIO)

                            CUtileria.CompletarRegBitacora(intGuardaFondo)

                            If intResultado = 1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Ya existe un registro con el FONDO ingresado", "Alta fondo", MessageBoxButton.OK, MessageBoxImage.Error)

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            ElseIf intResultado = -1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Error al intentar guardar el fondo", "Alta fondo", MessageBoxButton.OK, MessageBoxImage.Error)

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            ElseIf intResultado = 0 Then
                                fondoActual.EsEditableNuevo = False
                                fondoEnEdicion.EsEditableNuevo = False
                            End If

                            Mouse.OverrideCursor = Cursors.Arrow
                        Catch ex As Exception
                            Mouse.OverrideCursor = Cursors.Arrow

                            MessageBox.Show("Error TI500. Error al intentar guardar el fondo: " & ex.Message, "Alta de fondo", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End Try
                    Else
                        Try
                            Mouse.OverrideCursor = Cursors.Wait

                            Dim fondoActualizado As New CFondoBench()
                            fondoActualizado.FONDO = strFondoAnterior
                            fondoActualizado.BENCH = strBenchAnterior

                            Dim intActualizaFondo As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Actualiza fondo", "Se actualiza el fondo-bench. Inicio: FONDO = " & strFondoAnterior & ", BENCH = " & strBenchAnterior & ".Fin: FONDO = " & fondoEnEdicion.FONDO & ", BENCH = " & fondoEnEdicion.BENCH)

                            Dim intResultadoAct As Integer = ReportingServicio.ActualizaFondoBench(fondoActualizado, fondoEnEdicion, CServiciosMacrosSyBaseDB.IDUSUARIO, Columna)

                            CUtileria.CompletarRegBitacora(intActualizaFondo)

                            If intResultadoAct = 1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Ya existe un registro con el FONDO ingresado", "Actualiza fondo", MessageBoxButton.OK, MessageBoxImage.Error)

                                fondoEnEdicion.FONDO = strFondoAnterior
                                fondoEnEdicion.BENCH = strBenchAnterior

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)

                            ElseIf intResultadoAct = -1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Error al intentar actualizar el fondo", "Actualiza fondo", MessageBoxButton.OK, MessageBoxImage.Error)

                                fondoEnEdicion.FONDO = strFondoAnterior
                                fondoEnEdicion.BENCH = strBenchAnterior

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            End If

                            Mouse.OverrideCursor = Cursors.Arrow
                        Catch ex As Exception
                            fondoEnEdicion.FONDO = strFondoAnterior
                            fondoEnEdicion.BENCH = strBenchAnterior

                            Mouse.OverrideCursor = Cursors.Arrow

                            MessageBox.Show("Error TI500. Error al intentar actualizar el fondo: " & ex.Message, "Actualización de fondo", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End Try

                    End If

                    grdFondoBench.UpdateLayout()
                Else
                    CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                End If

            Case DataGridEditAction.Cancel

                fondoCambio = TryCast(grdFondoBench.Items(grdFondoBench.Items.Count - 1), CFondoBench)

                If fondoCambio.EsEditableNuevo Then
                    obcFondoBench.Remove(fondoCambio)
                    grdFondoBench.UpdateLayout()
                End If
        End Select
    End Sub

#End Region

#Region "Generales tipo instrumento"
    Private Sub grdTiposInstrumentos_BeginningEdit(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdTiposInstrumentos.BeginningEdit
        TipoInstrumentoEnEdicion = grdTiposInstrumentos.CurrentItem
        strTipoInstrumentoAuxCambio = TipoInstrumentoEnEdicion.TIPOINSTRUMENTO
    End Sub

    Private Sub grdTiposInstrumentos_CellEditEnding(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdTiposInstrumentos.CellEditEnding
        Dim TipoInstrumentoActual As New CTipoInstrumento()

        Select Case e.EditAction
            Case DataGridEditAction.Commit
                If Not sender.CurrentItem Is Nothing Then
                    Dim Columna As Integer = e.Column.DisplayIndex
                    Dim strTipoInstrumentoAnterior As String, strNombreAnterior As String, strClaseAnterior As String, strGrupoAnterior As String

                    TipoInstrumentoActual = TryCast(grdTiposInstrumentos.CurrentCell.Item, CTipoInstrumento)

                    If TipoInstrumentoActual.Equals(TipoInstrumentoEnEdicion) = False Then
                        CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        Exit Sub
                    End If

                    strTipoInstrumentoAnterior = TipoInstrumentoActual.TIPOINSTRUMENTO
                    strNombreAnterior = TipoInstrumentoActual.NOMBRE
                    strClaseAnterior = TipoInstrumentoActual.CLASE
                    strGrupoAnterior = TipoInstrumentoActual.GRUPO

                    If Columna = 0 Then
                        Dim txtContenidoCelda As Object = grdTiposInstrumentos.Columns(Columna).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaNombre As Object = grdTiposInstrumentos.Columns(1).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaClase As Object = grdTiposInstrumentos.Columns(2).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaGrupo As Object = grdTiposInstrumentos.Columns(3).GetCellContent(grdTiposInstrumentos.CurrentItem)

                        If txtContenidoCelda.Text.ToString.Length = 0 Then
                            MessageBox.Show("El campo tipo instrumento no puede ser vacío", "Alta/Actualización registro", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            Exit Sub
                        ElseIf Not IsNumeric(txtContenidoCelda.Text) Then
                            MessageBox.Show("El campo tipo instrumento debe ser numerico", "Alta/Actualización registro", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            Exit Sub
                        ElseIf txtContenidoCelda.Text.ToString.ToUpper.Equals(strTipoInstrumentoAuxCambio.ToUpper) Then
                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            Exit Sub
                        End If

                        TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = txtContenidoCelda.Text
                        TipoInstrumentoEnEdicion.NOMBRE = txtContenidoCeldaNombre.Text
                        TipoInstrumentoEnEdicion.CLASE = txtContenidoCeldaClase.Text
                        TipoInstrumentoEnEdicion.GRUPO = txtContenidoCeldaGrupo.Text
                    ElseIf Columna = 1 Then
                        Dim txtContenidoCelda As Object = grdTiposInstrumentos.Columns(0).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaNombre As Object = grdTiposInstrumentos.Columns(Columna).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaClase As Object = grdTiposInstrumentos.Columns(2).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaGrupo As Object = grdTiposInstrumentos.Columns(3).GetCellContent(grdTiposInstrumentos.CurrentItem)

                        TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = txtContenidoCelda.Text
                        TipoInstrumentoEnEdicion.NOMBRE = txtContenidoCeldaNombre.Text
                        TipoInstrumentoEnEdicion.CLASE = txtContenidoCeldaClase.Text
                        TipoInstrumentoEnEdicion.GRUPO = txtContenidoCeldaGrupo.Text
                    ElseIf Columna = 2 Then
                        Dim txtContenidoCelda As Object = grdTiposInstrumentos.Columns(0).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaNombre As Object = grdTiposInstrumentos.Columns(1).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaClase As Object = grdTiposInstrumentos.Columns(Columna).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaGrupo As Object = grdTiposInstrumentos.Columns(3).GetCellContent(grdTiposInstrumentos.CurrentItem)

                        TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = txtContenidoCelda.Text
                        TipoInstrumentoEnEdicion.NOMBRE = txtContenidoCeldaNombre.Text
                        TipoInstrumentoEnEdicion.CLASE = txtContenidoCeldaClase.Text
                        TipoInstrumentoEnEdicion.GRUPO = txtContenidoCeldaGrupo.Text
                    ElseIf Columna = 3 Then
                        Dim txtContenidoCelda As Object = grdTiposInstrumentos.Columns(0).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaNombre As Object = grdTiposInstrumentos.Columns(1).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaClase As Object = grdTiposInstrumentos.Columns(2).GetCellContent(grdTiposInstrumentos.CurrentItem)
                        Dim txtContenidoCeldaGrupo As Object = grdTiposInstrumentos.Columns(Columna).GetCellContent(grdTiposInstrumentos.CurrentItem)

                        TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = txtContenidoCelda.Text
                        TipoInstrumentoEnEdicion.NOMBRE = txtContenidoCeldaNombre.Text
                        TipoInstrumentoEnEdicion.CLASE = txtContenidoCeldaClase.Text
                        TipoInstrumentoEnEdicion.GRUPO = txtContenidoCeldaGrupo.Text
                    End If

                    TipoInstrumentoEnEdicion.EsEditableNuevo = TipoInstrumentoActual.EsEditableNuevo

                    If TipoInstrumentoEnEdicion.EsEditableNuevo Then
                        Try
                            Mouse.OverrideCursor = Cursors.Wait
                            Dim intGuardaTipoInstrumento As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Alta tipo instrumento", "Se registra el TIPO INSTRUMENTO = " & TipoInstrumentoEnEdicion.TIPOINSTRUMENTO & ", NOMBRE = " & TipoInstrumentoEnEdicion.NOMBRE & ", CLASE = " & TipoInstrumentoEnEdicion.CLASE & ", GRUPO = " & TipoInstrumentoEnEdicion.GRUPO)

                            Dim intResultado As Integer = ReportingServicio.AltaTipoInstrumento(TipoInstrumentoEnEdicion.TIPOINSTRUMENTO, TipoInstrumentoEnEdicion.NOMBRE, TipoInstrumentoEnEdicion.CLASE, TipoInstrumentoEnEdicion.GRUPO, CServiciosMacrosSyBaseDB.IDUSUARIO)

                            CUtileria.CompletarRegBitacora(intGuardaTipoInstrumento)

                            If intResultado = 1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Ya existe un registro con el tipo de instrumento ingresado ingresado", "Alta tipo instrumento", MessageBoxButton.OK, MessageBoxImage.Error)

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            ElseIf intResultado = -1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Error al intentar guardar el tipo instrumento", "Alta tipo instrumento", MessageBoxButton.OK, MessageBoxImage.Error)

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            ElseIf intResultado = 0 Then
                                TipoInstrumentoActual.EsEditableNuevo = False
                                TipoInstrumentoEnEdicion.EsEditableNuevo = False
                            End If

                            Mouse.OverrideCursor = Cursors.Arrow
                        Catch ex As Exception
                            Mouse.OverrideCursor = Cursors.Arrow

                            MessageBox.Show("Error TI500. Error al intentar guardar el tipo instrumento: " & ex.Message, "Alta tipo instrumento", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End Try
                    Else
                        Try
                            Mouse.OverrideCursor = Cursors.Wait

                            Dim TipoInstrumentoActualizado As New CTipoInstrumento()
                            TipoInstrumentoActualizado.TIPOINSTRUMENTO = strTipoInstrumentoAnterior
                            TipoInstrumentoActualizado.NOMBRE = strNombreAnterior
                            TipoInstrumentoActualizado.CLASE = strClaseAnterior
                            TipoInstrumentoActualizado.GRUPO = strGrupoAnterior

                            Dim intActualizaTipoInstrumento As Integer = CUtileria.GrabarBitacora("ConfigReporting", "Actualiza tipo instrumento", "Se actualiza el tipo instrumento. Inicio: TIPO INSTRUMENTO = " & strTipoInstrumentoAnterior & ", NOMBRE = " & strNombreAnterior & ", CLASE = " & strClaseAnterior & ",GRUPO = " & strGrupoAnterior & ". Fin: TIPO INSTRUMENTO = " & TipoInstrumentoEnEdicion.TIPOINSTRUMENTO & ", NOBRE = " & TipoInstrumentoEnEdicion.NOMBRE & ", CLASE = " & TipoInstrumentoEnEdicion.CLASE & ", GRUPO = " & TipoInstrumentoEnEdicion.GRUPO)

                            Dim intResultadoAct As Integer = ReportingServicio.ActualizaTipoInstrumento(TipoInstrumentoActualizado, TipoInstrumentoEnEdicion, CServiciosMacrosSyBaseDB.IDUSUARIO, Columna)

                            CUtileria.CompletarRegBitacora(intActualizaTipoInstrumento)

                            If intResultadoAct = 1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Ya existe un registro con el tipo de instrumento ingresado", "Actualiza tipo instrumento", MessageBoxButton.OK, MessageBoxImage.Error)

                                TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = strTipoInstrumentoAnterior
                                TipoInstrumentoEnEdicion.NOMBRE = strNombreAnterior
                                TipoInstrumentoEnEdicion.CLASE = strClaseAnterior
                                TipoInstrumentoEnEdicion.GRUPO = strGrupoAnterior

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)

                            ElseIf intResultadoAct = -1 Then
                                Mouse.OverrideCursor = Cursors.Arrow

                                MessageBox.Show("Error al intentar actualizar el tipo instrumento", "Actualiza tipo instrumento", MessageBoxButton.OK, MessageBoxImage.Error)

                                TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = strTipoInstrumentoAnterior
                                TipoInstrumentoEnEdicion.NOMBRE = strNombreAnterior
                                TipoInstrumentoEnEdicion.CLASE = strClaseAnterior
                                TipoInstrumentoEnEdicion.GRUPO = strGrupoAnterior

                                CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                            End If

                            Mouse.OverrideCursor = Cursors.Arrow
                        Catch ex As Exception
                            TipoInstrumentoEnEdicion.TIPOINSTRUMENTO = strTipoInstrumentoAnterior
                            TipoInstrumentoEnEdicion.NOMBRE = strNombreAnterior
                            TipoInstrumentoEnEdicion.CLASE = strClaseAnterior
                            TipoInstrumentoEnEdicion.GRUPO = strGrupoAnterior

                            Mouse.OverrideCursor = Cursors.Arrow

                            MessageBox.Show("Error TI500. Error al intentar actualizar el tipo instrumento: " & ex.Message, "Actualiza tipo instrumento", MessageBoxButton.OK, MessageBoxImage.Error)

                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End Try

                    End If

                    grdTiposInstrumentos.UpdateLayout()
                Else
                    CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                End If

            Case DataGridEditAction.Cancel

                TipoInstrumentoCambio = TryCast(grdTiposInstrumentos.Items(grdTiposInstrumentos.Items.Count - 1), CTipoInstrumento)

                If TipoInstrumentoCambio.EsEditableNuevo Then
                    obcTipoInstrumento.Remove(TipoInstrumentoCambio)
                    grdTiposInstrumentos.UpdateLayout()
                End If
        End Select
    End Sub

#End Region
End Class
